package com.example.demo.demo3.client;

import java.util.regex.Pattern;

public class InputValidator {

    // 声明正则表达式，只识别大小写字母或者全数字的10-20位
    private static final String BARCODE_REGEX = "^[a-zA-Z0-9]{10,20}$";
    // 声明最小重量为0
    private static final double MIN_WEIGHT = 0;
    // 声明最大重量为50
    private static final double MAX_WEIGHT = 50;

    // 创建验证器方法
    public boolean validateInput(String barcode, String lengthStr, String widthStr, String heightStr, String weightStr, ClientUI clientUI) {
        // 创建一个布尔变量 hasError 并初始化为 false，用于标记输入是否存在错误。
        boolean hasError = false;

        // 如果输入的单号格式不正确，则返回true，否则返回false
        if (!Pattern.matches(BARCODE_REGEX, barcode)) {
            clientUI.getBarcodeErrorLabel().setText("单号格式不正确，请输入由数字或者字母组成10-20位的单号！");
            hasError = true;
        }

        if (!isValidNumber(lengthStr)) {
            clientUI.getLengthErrorLabel().setText("长度必须为有效数字，请重新输入！");
            hasError = true;
        }

        if (!isValidNumber(widthStr)) {
            clientUI.getWidthErrorLabel().setText("宽度必须为有效数字，请重新输入！");
            hasError = true;
        }

        if (!isValidNumber(heightStr)) {
            clientUI.getHeightErrorLabel().setText("高度必须为有效数字，请重新输入！");
            hasError = true;
        }

        if (!isValidWeight(weightStr)) {
            clientUI.getWeightErrorLabel().setText("重量必须为有效数字，且范围必须在0-50之间，请重新输入！");
            hasError = true;
        }

        return hasError;
    }

    // 是否为有效数字方法；该方法用于判断传入的字符串 value 是否能被解析为一个有效的 double 类型的数字
    private boolean isValidNumber(String value) {
        try {
            Double.parseDouble(value);
            return true;
        } catch (NumberFormatException e) {
            return false;
        }
    }

    // 是否为有效重量方法；该方法用于判断传入的字符串 weightStr 是否能被解析为一个有效的重量值，并且该重量值是否在 MIN_WEIGHT 到 MAX_WEIGHT 的范围内
    private boolean isValidWeight(String weightStr) {
        try {
            double weight = Double.parseDouble(weightStr);
            return weight >= MIN_WEIGHT && weight <= MAX_WEIGHT;
        } catch (NumberFormatException e) {
            return false;
        }
    }
}